package com.yuqiao.read.utils;

import com.github.pagehelper.PageInfo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 
* @ClassName: ResponseResult 
* @Description:返回结果集实体
* @author rli 
* @date 2017年5月8日 下午5:09:48 
*
 */
public class ResponseResult implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 6811200139383949814L;
	//根据接口要求文档，对返回信息进行包装，返回状态为suc或err + 错误编码
	public static final String STATE_ERR = "err";
	public static final String STATE_SUC = "suc";

	private String msg   = "";
	private String state = STATE_SUC;
	private String errCode = "0";
	private Map<String, Object> result = new HashMap<String, Object>();

	public String getState() {
		return state;
	}

	public void setState(String stat) {
		this.state = stat;
	}
	/**
	 * @Description： 设置接口调用失败错误信息。
	 * @MethodName setErrorState
	 * @param err
	 */
	public void setErrorState(ErrorCode err){
		this.state = STATE_ERR;
		this.msg   = err.getErrMsg();
		this.errCode = "" + err.getValue();
		this.result.clear();//清空数据
	}
	
	/**
	 * @Description： 设置分页查询相关属性。
	 * @MethodName setPageInfo
	 * @param pageInfo
	 */
	public void setPageInfo(PageInfo<Map<String, Object>> pageInfo) {
		this.setresultList(pageInfo.getList());
		this.putResult(Params.pageNum,  "" + pageInfo.getPageNum());
		this.putResult(Params.total, "" + pageInfo.getTotal());
	}
	
	public void setresultList(List<Map<String, Object>> result) {
		this.result.put(Params.list, result);
	}
	/**
	 * 
	* @Title: setEntityList 
	* @Description: 设置返回beanList格式数据 
	* @param result 
	* @return void    返回类型 
	* @date 2017年5月8日 下午5:38:50  
	 */
	public <T> void setEntityList(List<T> result) {	
		this.result.put(Params.list, result);
	}
	
	public void setResultMap(Map<String, Object> result) {
		this.result.put(Params.dataDict, result);
	}
	
	public void setResultBean(Object result) {
		this.result.put(Params.dataDict, result);
		
	}
	/**
	 * Description:  向 list 中添加一个元素。 建议只添加一个元素时使用，添加多个元素时使用setresultList。
	 * @MethodName: addresultList
	 * @param result
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public void addResultList(Map<String, Object> result) {
		boolean isList = this.result.get(Params.list) instanceof List;
		if(!isList){
			this.result.put(Params.list, new ArrayList<Object>());
		}
		
		((List) this.result.get(Params.list)).add(result);
	}
	
	/**
	 * @Description： 向result中添加一个元素。
	 * @MethodName putresult
	 * @param key
	 * @param value
	 */
	public void putResult(String key, Object value) {
		this.result.put(key, value);
	}
	
	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public Object getresult() {
		return result;
	}
	public Object getresult(String key) {
		return result.get(key);
	}
	public void clearResult() {
		 result.clear();
	}
	public String getErrCode() {
		return errCode;
	}

	public void setErrCode(String errCode) {
		this.errCode = errCode;
	}

}
